#pragma once

// Header file to hold all of the SizedSPropTagArray definitions
// Visual Studio has a problem parsing structures built from the SizedSPropTagArray macro
// The end result is that the file doesn't get parsed out by the "Class View" and Intellisense
// features.  Putting them in their own separate header contains the problem.

// Some definitions swiped from edkmdb.h to avoid including it
#define pidExchangeXmitReservedMin		0x3FE0
#define pidProfileMin					0x6600
#define pidMessageReadOnlyMin			0x6640
#define PR_HAS_DAMS						PROP_TAG( PT_BOOLEAN, pidExchangeXmitReservedMin+0x0A)
#define PR_PROFILE_USER					PROP_TAG( PT_STRING8, pidProfileMin+0x03)
#define PR_PROFILE_MAILBOX				PROP_TAG( PT_STRING8, pidProfileMin+0x0B)
#define PR_REPLICA_SERVER				PROP_TAG(PT_TSTRING, pidMessageReadOnlyMin+0x04)
#define PR_HAS_NAMED_PROPERTIES			PROP_TAG(PT_BOOLEAN, pidMessageReadOnlyMin+0x0A)
#define PR_REPLICA_VERSION				PROP_TAG(PT_I8, pidMessageReadOnlyMin+0x0B)

enum
{
	CLIENT_USER_DISPLAY = 0,
	CLIENT_INBOX,
	NUM_CLIENT_PROPERTIES
};

const static SizedSPropTagArray(NUM_CLIENT_PROPERTIES, sptClientProps) =
{
	NUM_CLIENT_PROPERTIES,
	{
		PR_PROFILE_USER,
		PR_PROFILE_MAILBOX
	}
};

enum
{
	IDENTITY_DISPLAY_NAME = 0,
	IDENTITY_SEARCH_KEY,
	IDENTITY_ENTRYID,
	IDENTITY_EMAIL_ADDRESS,
	IDENTITY_ADDRTYPE,
	NUM_IDENTITY_PROPS
};

enum
{
	STATUS_RESOURCE_METHODS = 0,
	STATUS_PROVIDER_DISPLAY,
	STATUS_DISPLAY_NAME,
	STATUS_IDENTITY_DISPLAY,
	STATUS_IDENTITY_ENTRYID,
	STATUS_IDENTITY_SEARCH_KEY,
	STATUS_STATUS_CODE,
	STATUS_STATUS_STRING,
	NUM_STATUS_ROW_PROPS
};
const static SizedSPropTagArray(NUM_STATUS_ROW_PROPS, sptStatusRow) =
{
    NUM_STATUS_ROW_PROPS,
    {
		PR_RESOURCE_METHODS,
		PR_PROVIDER_DISPLAY,
		PR_DISPLAY_NAME,
		PR_IDENTITY_DISPLAY,
		PR_IDENTITY_ENTRYID,
		PR_IDENTITY_SEARCH_KEY,
		PR_STATUS_CODE,
		PR_STATUS_STRING
    }
};

enum
{
	STATUSOBJ_RESOURCE_METHODS = 0,
	STATUSOBJ_PROVIDER_DISPLAY,
	STATUSOBJ_DISPLAY_NAME,
	STATUSOBJ_IDENTITY_DISPLAY,
	STATUSOBJ_IDENTITY_ENTRYID,
	STATUSOBJ_IDENTITY_SEARCH_KEY,
	STATUSOBJ_STATUS_CODE,
	STATUSOBJ_STATUS_STRING,
	STATUSOBJ_OBJ_TYPE,
	NUM_STATUS_OBJ_PROPS
};
const static SizedSPropTagArray(NUM_STATUS_OBJ_PROPS, sptStatusObj) =
{
    NUM_STATUS_OBJ_PROPS,
    {
		PR_RESOURCE_METHODS,
		PROP_TAG(PT_UNSPECIFIED, PROP_ID(PR_PROVIDER_DISPLAY)),
		PROP_TAG(PT_UNSPECIFIED, PROP_ID(PR_DISPLAY_NAME)),
		PROP_TAG(PT_UNSPECIFIED, PROP_ID(PR_IDENTITY_DISPLAY)),
		PR_IDENTITY_ENTRYID,
		PR_IDENTITY_SEARCH_KEY,
		PR_STATUS_CODE,
		PROP_TAG(PT_UNSPECIFIED, PROP_ID(PR_STATUS_STRING)),
		PR_OBJECT_TYPE
    }
};

enum
{
	RECIP_DELETE = 1,
	RECIP_UPDATE_RESPONSIBILITY
};

enum
{
	RECIP_ROWID = 0,
	RECIP_USER_DISPLAY,
	RECIP_EMAIL_ADDRESS,
	RECIP_RECIPIENT_TYPE,
	RECIP_ADDRTYPE,
	RECIP_RESPONSBILITY,
	RECIP_REPORT_TEXT,
	NUM_RECIP_PROPERTIES
};

const static SizedSPropTagArray(NUM_RECIP_PROPERTIES, sptRecipProps) =
{
	NUM_RECIP_PROPERTIES,
	{
		PR_ROWID,
		PR_DISPLAY_NAME,
		PR_EMAIL_ADDRESS,
		PR_RECIPIENT_TYPE,
		PR_ADDRTYPE,
		PR_RESPONSIBILITY,
		PR_NULL
	}
};

const static SizedSPropTagArray	(24, excludeTags) =
{
	24,
	{
		PR_REPLICA_VERSION,
		PR_DISPLAY_BCC,
		PR_DISPLAY_CC,
		PR_DISPLAY_TO,
		PR_ENTRYID,
		PR_MESSAGE_SIZE,
		PR_PARENT_ENTRYID,
		PR_RECORD_KEY,
		PR_STORE_ENTRYID,
		PR_STORE_RECORD_KEY,
		PR_MDB_PROVIDER,
		PR_ACCESS,
		PR_HASATTACH,
		PR_OBJECT_TYPE,
		PR_ACCESS_LEVEL,
		PR_HAS_NAMED_PROPERTIES,
		PR_REPLICA_SERVER,
		PR_HAS_DAMS,
		PR_RCVD_REPRESENTING_ADDRTYPE,
		PR_RCVD_REPRESENTING_EMAIL_ADDRESS,
		PR_RCVD_REPRESENTING_ENTRYID,
		PR_RCVD_REPRESENTING_NAME,
		PR_RCVD_REPRESENTING_SEARCH_KEY,
		PR_MESSAGE_FLAGS
	}
};

enum
{
	SENDER_DISPLAY_NAME = 0,
	SENDER_EMAIL_ADDRESS,
	SENDER_ADDRTYPE,
	SENDER_SEARCH_KEY,
	SENDER_ENTRYID,
	MSG_RECEIVE_TIME,
	MSG_FLAGS,
	NUM_XP_SETPROPS
};

const static SizedSPropTagArray (7, excludeSaveTags) =
{
	7,
	{
		PR_ACCESS,
		PR_BODY,
		PR_RTF_SYNC_BODY_COUNT,
		PR_RTF_SYNC_BODY_CRC,
		PR_RTF_SYNC_BODY_TAG,
		PR_RTF_SYNC_PREFIX_COUNT,
		PR_RTF_SYNC_TRAILING_COUNT
	}
};

enum
{
	SENT_REP_NAME = 0,
	SENT_REP_SEARCH_KEY,
	SENT_REP_ENTRYID,
	SENT_REP_EMAIL_ADDRESS,
	SENT_REP_ADDRTYPE,
	NUM_SENT_REP_PROPS
};

const static SizedSPropTagArray (NUM_SENT_REP_PROPS, sentRepTags) =
{
	NUM_SENT_REP_PROPS,
	{
		PR_SENT_REPRESENTING_NAME,
		PR_SENT_REPRESENTING_SEARCH_KEY,
		PR_SENT_REPRESENTING_ENTRYID,
		PR_SENT_REPRESENTING_EMAIL_ADDRESS,
		PR_SENT_REPRESENTING_ADDRTYPE
	}
};